-
Notifications
You must be signed in to change notification settings - Fork 0
/
controller.ts
154 lines (140 loc) · 4.37 KB
/
controller.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import { Command, flags } from "@oclif/command";
import NoreaConfigHelper from "../../helpers/NoreaConfigHelper";
import { ControllerCommandHelper } from "../../helpers/ControllerCommandHelper";
import { resolve } from "path";
import { readFileSync } from "fs";
import { green } from "colors";
export default class MakeController extends Command {
static description = "create a new controller";
static flags = {
help: flags.help({ char: "h" }),
// separate interface
separate: flags.boolean({
char: "s",
description: "separate the model's interface",
default: false,
}),
// separate interface
noActions: flags.boolean({
char: "n",
description:
"not include controller actions (index, edit, show, delete, create)",
default: false,
}),
// include model
model: flags.boolean({
name: "model",
description: "include a model, generate if not exist.",
default: (ctx: any) => {
return !!ctx.flags.modelName;
},
}),
// model name
modelName: flags.string({
name: "modelName",
description:
"include a model with the given name, generate if not exist.",
}),
// include middleware
middleware: flags.boolean({
name: "middleware",
description: "include a middleware, generate if not exist.",
default: (ctx: any) => {
return !!ctx.flags.middlewareName;
},
}),
// middleware name
middlewareName: flags.string({
name: "middlewareName",
description:
"include a middleware with the given name, generate if not exist.",
}),
// include provider
provider: flags.boolean({
name: "provider",
description: "include a provider, generate if not exist.",
default: (ctx: any) => {
return !!ctx.flags.providerName;
},
}),
// provider name
providerName: flags.string({
name: "providerName",
description:
"include a provider with the given name, generate if not exist.",
}),
};
static args = [
{
name: "name",
required: true,
description: "controller name",
},
];
async run() {
const { args, flags } = this.parse(MakeController);
const configHelper = new NoreaConfigHelper();
if (!configHelper.initialized) {
this.log("There is not norea.js project in this folder.");
} else {
// file extension
const ext = configHelper.config.template === "typescript" ? "ts" : "js";
// excecute command
ControllerCommandHelper.create(this, {
ext: ext,
name: args.name,
includeActions: !flags.noActions,
config: configHelper.config,
controller: {
name: args.name,
template: readFileSync(
resolve(__dirname, `../../templates/controller.${ext}.hbs`)
).toString(),
routeTemplate: readFileSync(
resolve(__dirname, `../../templates/route.${ext}.hbs`)
).toString(),
},
model: flags.model
? {
name: flags.modelName ?? args.name,
separateInterface: flags.separate,
template: readFileSync(
resolve(
__dirname,
`../../templates/model${flags.separate ? "" : "-interface"}.${
configHelper.config.dbStrategy
}.${ext}.hbs`
)
).toString(),
interfaceTemplate: readFileSync(
resolve(__dirname, `../../templates/interface.${ext}.hbs`)
).toString(),
}
: undefined,
middleware: flags.middleware
? {
name: flags.middlewareName ?? args.name,
template: readFileSync(
resolve(__dirname, `../../templates/middleware.${ext}.hbs`)
).toString(),
}
: undefined,
provider: flags.provider
? {
name: flags.providerName ?? args.name,
template: readFileSync(
resolve(__dirname, `../../templates/provider.${ext}.hbs`)
).toString(),
}
: undefined,
})
.run()
.then(() => {
this.log(green(`\n The controller has been successfully created!\n`));
})
.catch((err) => {
this.log(`\n Failed to create the controller.\n`);
});
}
}
}